BOOTP and Beowulf


BOOTP Overview

BOOTP (IETF RFC 951) is a bootstrapping protocol designed to allow stateless hosts (clients) attached to a TCP/IP network to learn their configuration information from some host (server) endowed with knowledge about the nodes on its network.

BOOTP is only a lightly extensible protocol with severe restrictions on reply message size (if you choose not to use extension files). While BOOTP can, in principle, provide clients with information beyond TCP/IP configuration, the Beowulf project uses it only to distribute TCP/IP configuration.

BOOTP Server-side

We use the CMU bootpd v2.4 (this and newer versions for Linux) It is provided by most of the standard Linux distributions, including RedHat. There is no reason that we couldn't write a master Beowulf-server daemon that provided bootp server functionality based on a master Beowulf database rather than rely on bootptab files and external daemons. However, we don't really feel that this will simplify your life (for two reasons):

BOOTP Client-side

BOOTP provides a lot of client-side flexibilty and we've chosen to use it in the way that retains a lot of that flexibility.
See the description of the Beowulf node-boot sequence to see how BOOTP fits in; nodes may actually perform the BOOTP step in several ways:

Notes: (Q and A)


Q: My BOOTP packets NEVER get recieved by my BOOTP server

A: BOOTP is a UDP protocol. It is NOT reliable. For instance:
Under Linux, many 10/100Mbps Ethernet cards do not switch to 100MBps until a packet is sent out. If your node is connected to a 100Mbps Ethernet repeater, your Ethernet card didn't have a link until the card switched to 100Mb mode. If the first packet to the network in the boot sequence is an unreliable UDP packet (i.e. a BOOTP packet), that packet might be lost to the world. Make sure you pick a BOOTP client that will retry at least once before giving up.

A.2: Modern experimental kernels silently discard packets from 0.0.0.0 (ala BOOTP requests) unless you twiddle with the /proc/sys/net interface. See your linux/Documentation tree for details.

Q: My worldly node running the BOOTP server is connected to an extremely busy external network. There are 115 Xterminals and 25 network printers barraging me constantly with bootp requests. I only want to make bootp available to the private networks.

A: If your BOOTP server is a linux box with IP firewalling, try the following:
	/sbin/ipfwadm -I -a deny -P udp -D 0.0.0.0/0 bootps -W eth1
	
for example. The above will deny all bootp packets arriving on the eth1 interface. Supply the name of your external interface in place of eth1 for your situation.

Q: I want to run a 'private' bootpd for my cluster on a worldly node. Can I do this while also running a 'public' bootpd.

A: If you wish to do this (perhaps because you really want to have a 'private' bootptab that can be safely machine-written), you will need a kernel with IP firewalling and transparent proxy support. Try the following:
	/sbin/ipfwadm -I -a accept -P udp -D 0.0.0.0/0 bootps -W eth0 -r 2015
	
The above will route all bootp requests arriving on the eth0 interface to port 2015 on the same machine. You can configure your 'private' bootp server to listen to this port for requests. Supply the name of your internal interface in place of eth0 for your situation.

Q: I want to share my administrative workstation across multiple clusters. Is there anything special I need to do?

A: If each of your clusters is connected to a dedicated NIC on your administrative machine, you need to do nothing special. Configure a template for each cluster with approporiate values and all should work. If your clusters are connected through a dedicated 'virtual' interface (interface alias, under Linux for instance), there is a complication. packets broadcast to 255.255.255.255 are picked up by real interfaces only, not by alias interfaces. To force bootpd to report the correct server address in this case, you need to add an 'sa' entry to cluster templates in your bootptab file. See the provided sample bootp file for an example.

Light reading:

/etc/bootptab
A sample /etc/bootptab for use with Beowulf systems
IETF RFC 1534
Interoperation between DHCP and BOOTP